#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=2e5+10;
int st[N],a[N];
int last[N];
int use[N];
int n,k;
int y[N];
int check(int x)
{
//	if(x==1) 
//	cout<<x; 
	for(int i=1;i<=n;i++)
	{
		if(i-last[a[i]]>x+1)
		{
			if(use[a[i]]==0 && i-last[a[i]]-1<=2*x+1) use[a[i]]=1;
			else 
			{
				st[a[i]]=1;
			}
		}
		if(!st[a[i]]) last[a[i]]=i;
	}
//	if(x==1)
//	for(int i=1;i<=n;i++)
//	{
//		cout<<last[i]<<' '<<st[i]<<endl;
//	}
	int f=0;
	for(int i=1;i<=k;i++)
	{
		if(st[i]==0 && y[i]==1)
		{
			if(n-last[i]<=x && use[i]==1) f=1;
			if(use[i]==0 && n-last[i]<=1+2*x) f=1;
		}
		st[i]=0;
		use[i]=0;
		last[i]=0;
	 }
	 return f;
} 
int main()
{
	IOS;
	int t;
	cin>>t;
	while(t--)
	{
		cin>>n>>k;
		for(int i=1;i<=n;i++) cin>>a[i],y[a[i]]=1;
		
		int l=0,r=n+1;
		while(l<r)
		{
			int mid=l+r>>1;
//			cout<<mid<<endl;
			if(check(mid)) r=mid;
			else l=mid+1;
		}
		
		cout<<l<<endl;
		for(int i=1;i<=k;i++) y[i]=0;
	}

	return 0;
}

